約 6,658,506 件
https://w.atwiki.jp/hgsk/pages/33.html
イベント 概要 イベント発生待受部(Event loop&Event dispatcher)とイベント処理部(Event Handler)からなる イベントが発生するとイベントメッセージが送られる Event Handlerはコールバック関数として実装される場合が多い GUIと蜜月 マルチタスクと親友 バッファとしてイベントキューがあることも 実装例 イベント発生待受部はメインループで実装 イベントハンドラ(のコールバック関数)はdelegateで実装 http //ufcpp.net/study/csharp/sp_event.html http //wisdom.sakura.ne.jp/programming/cs/cs54.html DoJoだとconnect()がイベントハンドラAPI 有限状態マシン http //www.ibm.com/developerworks/jp/web/library/wa-finitemach1/
https://w.atwiki.jp/suffix/pages/254.html
変数について 変数の宣言方法 変数が定義されたか調べる方法 javascript配列 javascriptコレクション 関数について 関数の宣言方法 関数にデフォルト引数を設定する方法(省略できる引数に近い使い方) 可変引数 コールバック関数に引数を設定する クロージャ javascriptジェネレータ javascript版foreach その他 javascriptデバッグ 一定時間ごとの繰り返し
https://w.atwiki.jp/ohden/pages/498.html
Androidアプリ基礎 Linux Mint 14.1 ADT v21.1.0 OpenJDK 1.6.0_27 アプリケーション形態 アプリケーションを構成するコンポーネントは以下の4種類。 ■Activity 画面のこと。GUIでユーザ操作を受け付ける。 ■Service ユーザ操作を必要としない、バックグラウンドで動作するアプリ。 アプリケーションで定期的に画面上の情報を更新したい場合などもserviceで定期動作させて、activityで受け取るのような作りにしなければならない。 ■ContentProvider 保存したデータセットを複数のアプリで利用可能にする仕組み。 ■BroadcastReceiver intentはbroadcastされる。broadcastされたintentをreceiveするための仕組み。 と言うか、システムにコールバック関数(onRacive)を登録して、システムが条件に従ってどのコールバック関数実行するか判断するって感じかな? アプリケーションの状態遷移 まず、Androidアプリはmain関数を持たない。main関数はAndroid framework内にあり、各アプリはframewordから呼び出されているimage。 ■Activity 実行・ポーズ・停止の3状態を持つ。 起動トリガも3つ。startActivity()による生成。startActivityForResult()による生成。AndroidManifest.xmlによるシステムからの起動。 状態遷移は以下のような感じ。 onCreate() onStart() onResume() onPause() onStop() onRestart() onDestroy() ■Service serviceの起動トリガは3つ。startService()による生成。bindService()による生成。AndroidManifest.xmlによるシステムからの起動。 onCreate() onStart() onBind() onUnbind() onRebind() onDestroy() ■ContentProvider データ依存のコンポーネントなので、状態って状態は持たない。 onCreate() ■BroadcastReceiver registerReceiver()、またはAndroidManifest.xmlによってシステムに登録される。 対象のintentが送信されるとonReceive()が呼ばれる。コールバック関数登録みたいなもんですね。 onReceive() Intentについて Intentはアプリのコンポーネント間で処理を受け渡しする仕組み。 ■明示的Intentの発行 Activityで例えると、任意のアプリケーションで設定画面を開く等の行為がそれ。 開くべきActivityのクラス名などが分かってる場合。 ■暗黙的Intentの発行 何のコンポーネントを開けば良いのかクラス名などがわかってない場合、どういうものを開きたいかという情報だけをIntentに乗っけて、Androidに開いてってお願いする。すると、AndroidはIntentに付いてる情報から開けそうなアプリケーションを探して開こうとする。 例えば、メールに付いてきたURLをタップするとブラウザが開く。この時、メーラーはURLを渡すべきコンポーネントがなんてヤツなのか分からなくても開ける。コレはURLをタップした時に作成されるIntentに『URLですよ。』って情報が乗ってるから。Androidには予め『ほげってアプリはURLを開けるよ。』とかって情報が集められてる。それがBroadcastReceiverって仕組み。 この時、その情報を複数のコンポーネントが開けるって状況だと、どのアプリで開くか聞いてくる。 なんかのアプリでtextファイルを開こうとした場合、 こんな風にtextファイルを開くことができるんだって自己主張してるアプリ一覧から選択する画面が出てくる。※Nexus7(Android4.2)の場合 更新日: 2013年03月19日 (火) 10時03分05秒 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/arprojectfun/pages/24.html
Visual Studio を用いてプログラミングを行う場合は、DirectXを使う上で必要なWin32 APIに関する記述はテンプレートにより自動的に追加されるので、最小限理解が必要な部分のみ解説されたサイトを紹介する。 プロジェクトの作成参考サイト よく解らない解説宣言部解説 _tWinMain関数解説 MyRegisterClass関数解説 InitInstance関数解説 WndProc関数説明 About関数解説 追記情報とか プロジェクトの作成 Visual Studio を起動させる。 上部のメニューから [ファイル(F)] - [新規作成(N)] - [プロジェクト(P)... Ctrl+Shift+N] を選択する。 左の「プロジェクトの種類(P) 」から「Visual C++」を選択し、 右の「テンプレート(T) 」から「Win32 プロジェクト」を選択して 適当な「プロジェクト名(N) 」を記入した後、[OK]ボタンをクリックする。 「Win32 アプリケーションウィザード」というウィンドウが表示されるので、 何もせずに[完了]ボタンをクリックする。 プロジェクトの作成はこれで完了。 参考サイト DirectX を扱う上での最小限の知識はコチラで得られる。 はじめてのWindowsプログラム【目次】 - プログラム初心者による3Dゲーム制作勉強日記 - livedoor Blog(ブログ) 詳細な解説はコチラを参考にすると良いかも Win32 API入門 よく解らない解説 自分でも解らない部分が多いですが、一応解説を入れておきます。 「プロジェクト名.cpp」を開いてください。これがメインのファイルです。 それ以外は飾りです(ぇ 宣言部 #include "stdafx.h" #include "sample2.h" #define MAX_LOADSTRING 100 // グローバル変数 HINSTANCE hInst;// 現在のインターフェイス TCHAR szTitle[MAX_LOADSTRING];// タイトル バーのテキスト TCHAR szWindowClass[MAX_LOADSTRING];// メイン ウィンドウ クラス名 // このコード モジュールに含まれる関数の宣言を転送します ATOMMyRegisterClass(HINSTANCE hInstance); BOOLInitInstance(HINSTANCE, int); LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM); 解説 変数宣言とプロトタイプ宣言です。見たこと無い型がいっぱいですが、#defineで定義したものなので気にしなくて良いです。 気になる方は型で右クリックで「定義へ移動」をクリックして、確認してください。 _tWinMain関数 int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO ここにコードを挿入してください。 MSG msg; HACCEL hAccelTable; // グローバル文字列を初期化しています。 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_SAMPLE2, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // アプリケーションの初期化を実行します if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SAMPLE2)); // メイン メッセージ ループ while (GetMessage( msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, msg)) { TranslateMessage( msg); DispatchMessage( msg); } } return (int) msg.wParam; } 解説 メインループです。一番最初にこれを読み込みます。int main()やvoid main()などと同じです。 引数がたくさんありますが、Windowsプログラミングではこれが標準の引数です。 最初の方は変数宣言だったり、ウィンドウクラスの設定だったりします。 一番大事なところは、「メイン メッセージ ループ」というところです。 ウィンドウからのイベントやメッセージを受け取ります。 そのあと、登録したコールバック関数によって処理することが出来ます。 Windowsプログラムのメインは ウィンドウ監視 → 何かあったらメッセージが伝えられる → それを元にコールバック関数で制御 ってな感じの流れになってます。(違ったらごめんw) コールバック関数については下のほうで定義します。 MyRegisterClass関数 // // 関数 MyRegisterClass() // // 目的 ウィンドウ クラスを登録します。 // // コメント // // この関数および使い方は、 RegisterClassEx 関数が追加された // Windows 95 より前の Win32 システムと互換させる場合にのみ必要です。 // アプリケーションが、関連付けられた // 正しい形式の小さいアイコンを取得できるようにするには、 // この関数を呼び出してください。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= WndProc; wcex.cbClsExtra= 0; wcex.cbWndExtra= 0; wcex.hInstance= hInstance; wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SAMPLE2)); wcex.hCursor= LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName= MAKEINTRESOURCE(IDC_SAMPLE2); wcex.lpszClassName= szWindowClass; wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx( wcex); } 解説 使用するウィンドウ情報を登録する関数。ウィンドウを作るには情報の登録が必要です。 ここで、ウィンドウのスタイルやアイコンコールバック関数の登録などを行います。 この辺はテンプレなのでいじらない場合はこのままでも構いません。 InitInstance関数 // // 関数 InitInstance(HINSTANCE, int) // // 目的 インスタンス ハンドルを保存して、メイン ウィンドウを作成します。 // // コメント // // この関数で、グローバル変数でインスタンス ハンドルを保存し、 // メイン プログラム ウィンドウを作成および表示します。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // グローバル変数にインスタンス処理を格納します。 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } 解説 登録したウィンドウ情報を元にウィンドウを生成する関数。 先程設定したウィンドウの情報を元にウィンドウを作成します。 CreateWindow関数でウィンドウを作り、ShowWindowでウィンドウを可視化します。 詳しい関数の説明はリファレンス等見てください。 WndProc関数 // // 関数 WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的 メイン ウィンドウのメッセージを処理します。 // // WM_COMMAND- アプリケーション メニューの処理 // WM_PAINT- メイン ウィンドウの描画 // WM_DESTROY- 中止メッセージを表示して戻る // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 選択されたメニューの解析 switch (wmId) { case IDM_ABOUT DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT DestroyWindow(hWnd); break; default return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT hdc = BeginPaint(hWnd, ps); // TODO 描画コードをここに追加してください... EndPaint(hWnd, ps); break; case WM_DESTROY PostQuitMessage(0); break; default return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 説明 コールバック関数です。 ウィンドウから送られてきたメッセージを処理します。 例えば、「右上の×印を押されたときの処理は~しろ。」とか、「ボタン1が押されたときは~」って処理は此処に書きます。 詳しい説明は端折ります。 About関数 // バージョン情報ボックスのメッセージ ハンドラです。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG return (INT_PTR)TRUE; case WM_COMMAND if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; } 解説 バージョン情報を開いた時のコールバック関数。 おそらく、バージョン情報を開いたときに、コールバック関数を入れ替えてると思われ。 追記情報とか 勝手に追加しちゃいました。迷惑でしたら、言ってください。 -- 村山 (2010-02-15 08 55 00) そんなことないですよ。追記ありがとうございます、助かりました -- 荒川 (2010-02-15 08 59 49) 名前 コメント
https://w.atwiki.jp/suffix/pages/647.html
Void型ポインタとは コールバック関数とは コンパイル時の依存関係 core dumped errorの解決策 数字とchar型文字列 -数字を文字列として扱う(itoa的なもの)。ファイルに番号をつけて保存するときとかに使う? 値の交換時のテクニック ESCのエスケープシーケンスについて 四捨五入について ライブラリ
https://w.atwiki.jp/chugoku/pages/96.html
OpenCVだけの機能で線を引くことができる。glutかVC++かが必要かと思ったが、OpenCVにはマウスイベントをコールバックできるのでcvLine関数を使えば線は書ける。 マウスをクリックした座標からマウスをドラッグ中は暫定的な線を描き、左マウスを離した座標で直線を固定する。 標準出力には(クリック開始座標)-(クリック上げ時の座標) 距離を表示する。 C \usr\lesson\opencv\simple\マウスでcvLine main (21,22)-(49,22) distance 28.000000 (132,21)-(40,220) distance 219.237314 (293,4)-(2,294) distance 410.829648 (3,3)-(296,297) distance 415.072283 (151,147)-(299,147) distance 148.000000 cvLine(IplImage,開始座標,終点座標,CV_RGB(255,255,255)で白,線の太さ,8連結とかスムーズとか,座標の小数点以下の桁を表すビット数) 4や8連結 cvLine ソースコードのon_mouse関数のフォーマットはcvSetMouseCallback関数の説明文を参照 マウスイベント用コールバック関数の書式 コールバック関数は以下のように書くように説明されている。 void Foo(int event, int x, int y, int flags, void* param); コールバック関数名をFooとしているが何でも構わない。ここではon_mouseとしたがabcでも何でもいい。ただし、関数の戻り値の型、引数の数とそれぞれの型は一致していること。(当然、仮引数の変数名も何でも構わない) 以下がソースコード #include stdio.h #include math.h #include cv.h #include highgui.h /* コードが読みやすいようにマウスイベント関係の定数を一覧しておく #define CV_EVENT_MOUSEMOVE 0 移動 #define CV_EVENT_LBUTTONDOWN 1 左クリック下げ時 #define CV_EVENT_RBUTTONDOWN 2 #define CV_EVENT_MBUTTONDOWN 3 #define CV_EVENT_LBUTTONUP 4 左クリック上げ時 #define CV_EVENT_RBUTTONUP 5 #define CV_EVENT_MBUTTONUP 6 #define CV_EVENT_LBUTTONDBLCLK 7 左ダブルクリック時 #define CV_EVENT_RBUTTONDBLCLK 8 #define CV_EVENT_MBUTTONDBLCLK 9 中ボタンダブルクリック時 #define CV_EVENT_FLAG_LBUTTON 1 #define CV_EVENT_FLAG_RBUTTON 2 #define CV_EVENT_FLAG_MBUTTON 4 #define CV_EVENT_FLAG_CTRLKEY 8 Ctrlキー #define CV_EVENT_FLAG_SHIFTKEY 16 Shiftキー #define CV_EVENT_FLAG_ALTKEY 32 ALTキー */ IplImage *dsp_img, *src_img = 0; /* マウスイベント用コールバック関数 この関数のフォーマットはcvSetMouseCallbackで決まっている */ void on_mouse (int event, int x, int y, int flags, void *param)//マウスイベント毎に何度も再入してくる { CvPoint pt = cvPoint (x, y); static CvPoint start_pt = { -1, -1 };//static この変数はこの関数を抜けてからも有効にしておく if (event == CV_EVENT_LBUTTONDOWN) { start_pt = cvPoint (x, y); } else if (event == CV_EVENT_MOUSEMOVE (flags CV_EVENT_FLAG_LBUTTON)) { dsp_img = cvCloneImage (src_img);//前の描画がクリアー これをコメントアウトすると面白い描画になる。 if (start_pt.x 0) { start_pt = pt; } // color thick cvLine (dsp_img, start_pt, pt, CV_RGB(255,255,255), 1, 0, 0); //cvLine (dsp_img, start_pt, pt, CV_RGB(255,255,255), 1, CV_AA, 0);//滑らか cvShowImage ("image", dsp_img);//その都度線を引いて表示する } else if (event == CV_EVENT_LBUTTONUP) { src_img = cvCloneImage (dsp_img);//書き込んだものを固定 printf("(%d,%d)-(%d,%d)",start_pt.x,start_pt.y,pt.x,pt.y); double x=start_pt.x-pt.x; double y=start_pt.y-pt.y; printf(" distance %f\n",sqrt(x*x+y*y)); } } int main (int argc, char **argv) { CvSize window_size = { 300, 300 }; src_img = cvCreateImage (window_size, IPL_DEPTH_8U, 3); dsp_img = cvCloneImage (src_img); cvNamedWindow ("image", CV_WINDOW_AUTOSIZE); cvShowImage ("image", src_img); cvSetMouseCallback ("image", on_mouse, 0);//イベントを受けるウィンドウタイトル名を指定し、コールバック関数名も指定 cvWaitKey (0); cvReleaseImage ( src_img); cvReleaseImage ( dsp_img); } 座標と距離の他に、角度が欲しいな。 「今日の訪問数 - 」 「昨日の訪問数 - 」 「今までの訪問数 - 」 名前 コメント
https://w.atwiki.jp/sevenlives/pages/2621.html
イベント・ループ コールバック関数 ビジー・ウェイト?
https://w.atwiki.jp/aniwikigalaxystar/pages/304.html
コールバッジはシンオウ地方ポケモンリーグ公認のジムバッジの一つ。 クロガネジムのリーダー、ヒョウタに勝つと貰える。 フィールド上で秘伝技「いわくだき」が使えるようになる。
https://w.atwiki.jp/suffix/pages/1297.html
オブジェクトの状態を監視するものに、Object.observeがある。 var obj = {}; Object.observe(obj, sample); // オブジェクトの状態変化の際のコールバック関数を指定 obj.x = 2; //オブジェクトの状態を変化させる。 function sample(change) { console.log(change); } 参考URL http //js-next.hatenablog.com/entry/2014/03/08/185434 https //developer.mozilla.org/en-US/docs/Web/API/MutationObserver
https://w.atwiki.jp/tmiya/pages/15.html
トップ チュートリアル和訳 4 Everything is an object 4 全てはオブジェクト Scala は純粋なオブジェクト指向ですが、それは数や関数も含めて全てがオブジェクトであるという意味においてです。この点において Java とは異なります。というのは Java ではプリミティブ型 (例えば boolean や int) と参照型とを区別しており、また関数を値として扱えないからです。 4.1 数はオブジェクト 数もオブジェクトなのでメソッドを持ちます。実際、下記のような式 1 + 2 * 3 / x はメソッド呼び出しだけから成り立っています。それは前節で見たように下記の式と等価だからです。 (1).+(((2).*(3))./(x)) これは、+, * なども Scala では有効な識別子だ、ということも意味しています。 数字の周りの括弧は必要です。というのは、Scala の字句解析はトークンに対して最長一致規則を使うからです。ですから、下記の式 1.+(2) は、トークン 1.、+、2. に分解されます。このようにトークン化されるのは、1. が 1 よりも有効な長い一致となるからです。トークン 1. はリテラル 1.0 として解釈され、Int ではなく Double を形づくります。 (1).+(2) と式を書けば、1 が Double として解釈されるのを防げます。 4.2 関数はオブジェクト 多分 Java プログラマがより驚くことは、関数もまた Scala ではオブジェクトだということでしょう。従って関数を引数として渡したり、変数に格納したり、他の関数からの戻り値にしたりできます。関数を値として扱うこの能力は、関数プログラミングと呼ばれる大変興味深いプログラミング・パラダイムの基礎の一部です。 なぜ関数を値として用いることが有用であるか、の非常に簡単な例として、1秒毎に何かアクションを行うタイマー関数について考えてみましょう。行うアクションをどのように渡せば良いでしょうか? 関数として、がきわめて論理的です。このように関数を渡す簡単な例は、多くのプログラマはよくご存知でしょう。ユーザインタフェイスのコードにおいて、何かイベントが起こった時に呼び出されるコールバック関数を登録する際によく使うからです。 下記のプログラムで、タイマー関数は oncePerSecond と呼ばれ、コールバック関数を引数として取ります。この関数の型は () = Unit と書かれ、引数無しで戻り値無しである全ての関数の型です ( Unit 型は C/C++ の void に似ています) 。このプログラムの main 関数は単にこのタイマー関数を、端末に文章を表示するコールバック関数を付けて呼び出すだけです。別の言い方をすれば、このプログラムは1秒毎に "time flies like an arrow" という文章を表示し続けます。 object Timer { def oncePerSecond(callback () = Unit) { while (true) { callback(); Thread sleep 1000 } } def timeFlies() { println("time flies like an arrow...") } def main(args Array[String]) { oncePerSecond(timeFlies) } } 文字列を表示するために System.out のメソッドではなく、あらかじめ定義された println メソッドを使っている、ということに留意して下さい。 4.2.1 無名関数 このプログラムは理解しやすいですが、もう少し洗練できます。まずはじめに、関数 timeFlies は、後で onecePerSecond 関数に渡すためだけに定義されていることに留意して下さい。関数に名前を付けるのは、一度きりしか使わないなら不必要と思われます。実のところ oncePerSecond に渡すためだけにこの関数を作成できればよいでしょう。Scala では無名関数、その名の通り名前の無い関数、を使えば可能です。私たちのタイマープログラムを timeFlies の代わりに無名関数を使って書き直すと、このようになります。 object TimerAnonymous { def oncePerSecond(callback () = Unit) { while (true) { callback(); Thread sleep 1000 } } def main(args Array[String]) { oncePerSecond(() = println("time flies like an arrow...")) } } この例で無名関数を使っていることは、関数の引数リストと本体を分離している右矢印 = によって判ります。引数リストが空であることは、矢印の左側の空の括弧の組で判ります。関数の本体は上の timeFlies と同じです。 前ページ 目次 次ページ 訳は関係ないですけど、「1 + 2 * 3 / x」と「1.+(2.*(3./(x)))」は等価ではないですよね。正しくは「(1).+( (2).*(3)./(x) )」かと。 -- 通りすがり (2010-04-09 17 51 46) 名前 コメント